\subsection{Benutzungsoberfl\"ache}
\label{subsec:benutzerOberflaeche}
Die Implementierung der einzelnen Elemente l\"asst sich anschaulich anhand der in Abbildung \ref{fig:GUI} gezeigten GUI erl\"autern. Dort sind die in diesem Abschnitt beschriebenen Elemente der Benutzungsoberfl\"ache hervorgehoben sowie einige weitere Elemente, die in den folgenden Abschnitten erkl\"art werden. 
Die graphische Benutzeroberfl\"ache von \RENGA ist in drei Teile gegliedert die im folgenden kurz beschrieben werden. Abbildung \ref{fig:GUIclasses} zeigt die beteiligten Klassen und deren Zusammenhang. Alle drei Klassen, TopPanel, StatusBar und DrawingArea, sind verantwortlich f\"ur dieselbe Instanz der Klasse CompositeOperation (siehe Abschnitt \ref{subsubsec:CompositeOperationen}) bzw. deren Control-Klasse und stellen diese dar oder nehmen Ver\"anderungen an ihr vor. \\
Abbildung \ref{fig:GUI} zeigt einen annotierten Screenshot der Oberfl\"ache.   

\begin{figure}[htp]
\centering
\includegraphics[scale=0.8,angle=90]{figures/UML-GUI.ps}
\caption{Klassen der graphischen Benutzungsoberfl\"ache}
\label{fig:GUIclasses}
\end{figure}

\begin{figure}[htp]
\centering
\includegraphics[scale=0.4]{figures/Renga1.eps}
\caption{Screenshot der graphischen Benutzeroberfl\"ache}
\label{fig:GUI}
\end{figure}


\subsubsection{TopPanel}
Das TopPanel dient zum Hinzuf\"ugen und Entfernen der einzelnen Operation-Klassen zum Control-Objekt der gerade in Bearbeitung befindlichen CompositeOperation, sowie zum Start der Berechnung. F\"ur Start, Add und Remove-Selected befinden sich Kn\"opfe im TopPanel, zur Auswahl der Operationen dient eine ComboBox, die zu Beginn der Bearbeitung aus der zentralen Registry f\"ur Operationen bef\"ullt wird. Da Eingangs- und Ausgangsoperationen einer Sonderbehandlung bed\"urfen, sind f\"ur sie zus\"atzlich Kn\"opfe vorhanden.\\
Die Implementierung der einzelnen Funktionen ist durch die restliche Architektur (siehe folgende Abschnitte) sehr einfach, in allen F\"allen m\"ussen nur Add, Remove bzw. Start-Methoden des Control-Objekts aufgerufen werden. 

\subsubsection{StatusBar}
Die StatusBar dient zur Darstellung der einzelnen Aktionen, die mit dem aktuell in der DrawingArea gew\"ahlten Objekt durchf\"uhrbar sind. Die Darstellung ist gegliedert in die Sektionen Click, Double-Click, Drag und Shift-Drag. Die StatusBar implementiert das Observer-Interface und kann so \"uber das Ausw\"ahlen einer neuen Aktion informiert werden. Da die Aktionen f\"ur Click, Drag und Shift-Drag f\"ur alle Operationen dieselben sind, werden diese direkt angezeigt. Die Aktion f\"ur einen Doppelclick ist allerdings abh\"angig von der Operation. Um diese anzeigen zu k\"onenn wird die $getDoubleClickActionName$-Methode der Klasse Operation (siehe Abschnitt \ref{subsec:operationen}) aufgerufen. Um eine Ver\"anderung der Auswahl mitgeteilt zu bekommen, verwendet StatusBar den Observer/Observable-Mechanismus von Java.

\subsubsection{DrawingArea}
Die DrawingArea dient zur Darstellung der einzelnen Operationen und deren Verbindungen. Die Darstellung selbst ist sehr einfach, weil sich bereits jede Op\-era\-tion-Klasse selbst darstellen kann. Wenn sie von der DrawingArea dazu aufgefordert wird muss nur \"uber die Liste der Operation-Klassen iteriert werden und die jeweilige $drawYourself(Graphics\ g)$-Methode aufgerufen werden. Da die Darstellung jedes Mal erneuert werden muss, wenn Operationen hinzugef\"ugt, entfernt oder bewegt werden, implementiert DrawingArea das $Observer$-Interface und kann so \"uber solche Ver\"anderungen informiert werden. Weiter muss die DrawingArea auch \"uber das Hinzuf\"ugen von Eingangs- und Ausgangsoperationen zu in dieser Operation enthaltenen CompositeOperationen informiert werden, da sich auch hierdurch die Darstellung der aktuellen CompositeOperation ver\"andert (die Anzahl der Verbindungsknoten an der Darstellung der CompositeOperation muss ver\"andert werden), die \"Uberwachenung aller Ver\"anderungen der inneren Operation ist hierf\"ur zu aufw\"andig. Zu diesem Zweck wurde das Interface InputOutputListener geschaffen, das von DrawingArea implementiert wird und nur \"uber das Hinzuf\"ugen und Entfernen von Ein- und Ausgagsoperationen informiert.